/*
 * @Author: mark
 * @Date: 2023-08-13 09:03:34
 * @LastEditors: mark
 * @LastEditTime: 2023-08-28 07:00:15
 * @FilePath: /自研/RuoYi_egg/ruoyi-egg/app/controller/system/sysConfig.js
 * @Description:
 *
 * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
 */
const Controller = require("egg").Controller;

// 定义请求接口的请求参数规则
const queryRule = {
  configId: { type: "string", required: false },
  configKey: { type: "string", required: false },
  configName: { type: "string", required: false },
  configType: { type: "string", required: false },
  configValue: { type: "string", required: false },
  createBy: { type: "string", required: false },
  createTime: { type: "string", required: false },
  remark: { type: "string", required: false },
  updateBy: { type: "string", required: false },
  updateTime: { type: "string", required: false },
};

/**
 * @Controller 参数配置
 */
class SysConfigController extends Controller {
  /**
   * 普通分页查询
   * @param {*} ctx
   */
  /**
   * @summary 参数配置表查询  
   * @description 参数配置表查询  
   * @Router get /system/config/list
   * @request query string pageNum 页码 默认 1
   * @request query string pageSize 单页数量 默认 10
   * @request query string configId 参数主键
   * @request query string configKey 参数键名
   * @request query string configName 参数名称
   * @request query string configType 系统内置（Y是 N否）
   * @request query string configValue 参数键值
   * @request query string createBy 创建者
   * @request query string createTime 创建时间
   * @request query string remark 备注
   * @request query string updateBy 更新者
   * @request query string updateTime 更新时间
   * @response 200 SystemConfigList 操作成功
   */
  async list(ctx) {
    ctx.validate(queryRule, ctx.request.query);
    ctx.body = await ctx.service.system.sysConfig.list(ctx.request.query);
    ctx.status = 200;
  }

  /**
   * 获取列表数据
   * @param {*} ctx
   */
  async allList(ctx) {
    ctx.body = await ctx.service.system.sysConfig.allList(ctx.request.query);
    ctx.status = 200;
  }

  /**
   * @summary 参数配置表获取配置参数字段  
   * @description 参数配置表获取配置参数字段  
   * @Router get /system/config/configKey/{configKey}
   * @response 200 SystemConfigConfigkey 操作成功
   */
  async getKey(ctx) {
    ctx.body = await ctx.service.system.sysConfig.getKey(ctx.params.configKey);
    ctx.status = 200;
  }

  /**
   * 删除
   * @param {*} ctx
   */
  /**
   * @summary 参数配置表删除  
   * @description 参数配置表删除  
   * @Router delete /system/config/{configId}
   * @response 200   操作成功
   */
  async delete(ctx) {
    ctx.body = await ctx.service.system.sysConfig.delete(ctx.params.configId);
    ctx.status = 200;
  }

  /**
   * 更新
   * @param {*} ctx
   */
  /**
   * @summary 参数配置表修改  
   * @description 参数配置表修改  
   * @Router put /system/config
   * @response 200   操作成功
   */
  async update(ctx) {
    ctx.body = await ctx.service.system.sysConfig.update(ctx.request.body);
    ctx.status = 200;
  }

  /**
   * 获取详情
   * @param {*} ctx
   */
  /**
   * @summary 参数配置表详情  
   * @description 参数配置表详情  
   * @Router get /system/config/{configId}
   * @request query string configId 参数主键
   * @request query string configKey 参数键名
   * @request query string configName 参数名称
   * @request query string configType 系统内置（Y是 N否）
   * @request query string configValue 参数键值
   * @request query string createBy 创建者
   * @request query string createTime 创建时间
   * @request query string remark 备注
   * @request query string updateBy 更新者
   * @request query string updateTime 更新时间
   * @response 200   操作成功
   */
  async detail(ctx) {
    ctx.validate(queryRule, ctx.request.query);
    ctx.body = await ctx.service.system.sysConfig.detail(ctx.params.configId);
    ctx.status = 200;
  }

  /**
   * 创建
   * @param {*} ctx
   */
  /**
   * @summary 参数配置表新增  
   * @description 参数配置表新增  
   * @Router post /system/config
   * @response 200   操作成功
   */
  async create(ctx) {
    ctx.body = await ctx.service.system.sysConfig.create(ctx.request.body);
    ctx.status = 200;
  }

  /**
   * 刷新缓存
   */
  /**
   * @summary 参数配置刷新缓存  
   * @description 参数配置刷新缓存  
   * @Router delete /system/config/refreshCache
   * @response 200   操作成功
   */
  async refreshCache(ctx) {
    ctx.body = await ctx.service.system.sysConfig.refreshCache();
    ctx.status = 200;
  }

  /**
   * @summary 参数配置导出  
   * @description 参数配置导出  
   * @Router post /system/config/export
   * @response 200   操作成功
   */
  async downLoad(ctx) {
    let data = await ctx.service.system.sysConfig.allList(ctx.request.query);

    let downLoadModule = ctx.model.SysConfig.fieldRawAttributesMap;
    let columnData = [];
    for (var key in downLoadModule) {
      columnData.push({
        header: downLoadModule[key].comment,
        key: ctx.underlineToHump(key),
        width: 15,
      });
    }
    if (data.code == 200) {
      await ctx.service.exportExcel.publicDownLoad(columnData, data.data);
    } else {
      ctx.body = data;
      ctx.status = 200;
    }
  }
}

module.exports = SysConfigController;
